
Nightwatch 提供了 Command-line Test Runner,用來跑各種類型的測試,例如:指定測試環境、依群組或標籤或個別檔案、循序或平行執行等。其設定檔的預設名稱是 nightwatch.json 或 nightwatch.conf.js,如果兩者都出現,會優先選擇 nightwatch.conf.js,設定檔位置在這個專案的根目錄底下。
設定檔的範例可參考這裡。
本系列文章皆使用這個專案,可以拉下來玩玩;有什麼問題都可以提出 issue。
設定檔分為三個部分:基本設定、Selenium Server 相關設定和測試環境相關設定。
src_folders:測試程式碼的位置output_folder:測試報告的位置custom_commands_path:客製化指令的位置custom_assertions_path:客製化斷言的位置page_objects_path:Page Objects 的位置globals_path:External Globals 的位置live_output:是否即時顯示測試結果test_workers:使用 Test Workers 的數量test_runner:啟用哪一個 Test Runner,使用 nightwatch 或 mocha"selenium": {...} 中
server_path:Selenium Server 的位置,start_process 啟用時才需設定port:Selenium 所佔用的埠號start_process:是否自動管理 Selenium Processstart_session:是否自動啟用 Selenium Sessionlog_path:Log 的位置cli_args:要傳入 Selenium Process 的 cli 參數,這裡可分別對各個瀏覽器驅動程式的選項做設定"test_settings": {...},必填 default 環境),例如:分別為預設環境和 staging 環境等代入不同的設定值。
launch_url:載入的網址selenium_host:Selenium Server 所用的 hostname / IPselenium_port:Selenium Server 所用的埠號request_timeout_options:對 Selenium Server 發出 HTTP Request 的 timeout 時間與重試次數silent:是否顯示更多 Selenium 指令紀錄output:是否關閉 terminal outputdisable_colors:是否關閉 terminal output 的顏色顯示screenshots:出錯時是否螢幕截圖username:驗證時需要輸入的 usernameaccess_key:驗證時需要輸入的 access_keyproxy:proxydesiredCapabilities:新建立 Session 時傳入 Selenium Webdriver 的物件globals:測試環境所代入的物件資料exclude:要忽略的測試資料夾或測試程式filter:載入測試時需要被使用的資料夾或資料檔案log_screenshot_data:Log 中的螢幕截圖是否使用 Base64 圖檔use_xpath:是否使用 Xpath 為預設的定位網頁元素方式cli_args:用來覆寫在 Selenium Server 相關設定中所設定的 Selenium Process 的 cli 參數end_session_on_fail:當測試程式的斷言失敗時自動結束 Sessionskip_testcases_on_fail:當有 Test Case 錯誤出現時忽略後續的 Test Caseoutput_folder:覆寫基本設定的測試報告的位置persist_globals:是否可覆寫 Test Globalsdetailed_output:測試報告是否顯示詳細資料以下特別說明測試環境相關的設定。
Nightwatch Test Runner 可使用 --env 代入指定的測試環境。例如,在這裡有 default 和 staging 兩種環境,依照不同需求,我們可以分別測試任一環境或同時跑測試於這兩個環境。
// nightwatch.conf.js
{
...
"test_settings": {
"default": {
"launch_url": "http://localhost",
"globals": {
"firstGlobalVar": "Hello World!",
"secondGlobalVar": "This is me."
}
},
"staging": {
"launch_url": "http://staging.host",
"globals": {
"firstGlobalVar": "Hi ~"
}
}
}
}
沒有指定環境,就是預設環境 default。
nightwatch
等同於
nightwatch --env default
指定環境 staging,將 --env 代入 staging 即可。
nightwatch --env staging
launch_url 屬性若不同環境需代入不同的 URL,則可使用 launch_url 分別設定。例如:由於在上例中執行 nightwatch --env staging,所以 browser.launchUrl 會得到 http://staging.host。注意,若沒有指定執行環境,例如執行 nightwatch,則會使用 default 値 http://localhost。
module.exports = {
'Demo test': function (browser) {
browser
.url(browser.launchUrl) // "http://staging.host"
// ...
.end();
}
};
Test Globals 是存放一些名-值對(Name-Value Pairs)的地方,用於代入測試程式中使用。與上面的 launch_url 屬性一樣,可根據環境設定不同的 Test Globals。因此,若執行 nightwatch --env staging
module.exports = {
'Demo test': function (browser) {
console.log(browser.globals);
}
};
則 console 所得到的 Test Globals 是
{
"firstGlobalVar": "Hi ~"
}
備註:每次執行測試程式(Test Suite)時,Test Globals 預設都會建立深拷貝(Deep Copy)的物件,也就是說不會更改初始設定値。所以,如果希望整個測試過程都使用同一個物件,那麼 persist_globals 就要設定為 true,來允許被改變。
在這個範例-Nightwatch101 中,設定檔是 nightwatch.conf.js,其中包含基本設定、Selenium Server 設定和環境設定。我們也將一些 test_settings 的設定提出來放在外部檔案 globals.js 中,例如:Hooks、環境變數、客製化測試報告所用的 plugin 等,好處是設定檔會比較乾淨整齊,這些複雜的判斷運算就包給外部檔案吧。
以上部份在後面談到 Nightwatch Test Runner 時會有更詳細的說明,現在只要先把基本的東西設定好,可以跑測試就好了。
網誌版。